<?php

namespace core\lib\tool;

use Exception;
use GuzzleHttp\Client;

class File
{
    /**
     * 从远程地址下载文件并保存到指定路径
     *
     * 该方法用于从给定的远程 URL 下载文件，并将其保存到指定的本地路径。
     * 
     * @param string $url 远程文件的 URL 地址
     * @param string $savePath 保存文件的本地路径
     * @return string
     */
    public static function downloadRemoteFile(string $url, string $savePath): string
    {
        $fileinfo     = pathinfo($url);            //下载文件文件名后缀等信息
        $guzzleClient = new Client();
        $response     = $guzzleClient->get($url);
        if ($response->getStatusCode() === 200) {

            // 获取响应体
            $body = $response->getBody();

            // 创建本地文件
            $downloadpath = runtime_path() . '/storage/' . trim($savePath, '/')  . '/';
            if (!file_exists($downloadpath)) {
                mkdir($downloadpath, 0777, true);
            }
            $file = fopen($downloadpath . $fileinfo['basename'], 'w');

            // 将响应体保存到本地文件
            fwrite($file, $body);

            // 关闭文件
            fclose($file);
            return $downloadpath . $fileinfo['basename'];
        } else {
            throw new Exception('获取远程文件失败');
        }
    }
}
